package com.rc.web.mapper;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.Row;
import com.rc.pojo.dto.plantItem.PlantItemQuery;
import com.rc.pojo.po.PlantItem;
import com.rc.pojo.vo.plantitem.PlantItemPageVO;

import java.util.List;

import static com.rc.pojo.po.table.AreaTableDef.AREA;
import static com.rc.pojo.po.table.PlantItemTableDef.PLANT_ITEM;
import static com.rc.pojo.po.table.PlantTableDef.PLANT;

/**
 * 植物项表 映射层。
 * 提供植物项相关的数据库操作接口
 */
public interface PlantItemMapper extends BaseMapper<PlantItem> {

    /**
     * 根据植物ID查询植物项列表
     * @param plantId 植物ID
     * @return 植物项列表
     */
    default List<PlantItem> selectByPlantId(long plantId){
        return selectListByQuery(QueryWrapper.create()
                .join(AREA).on(PLANT_ITEM.AREA_ID.eq(AREA.ID))
                .where(AREA.PLANT_ID.eq(plantId))
        );
    }

    /**
     * 分页查询植物项
     * @param query 分页查询条件
     * @return 分页结果
     */
    default Page<PlantItemPageVO> selectPage(PlantItemQuery query){
        return paginateAs(query.getCurrent(),query.getPageSize(),QueryWrapper.create()
                        .select(PLANT_ITEM.ALL_COLUMNS,
                                AREA.NAME.as("areaName"), PLANT.TYPE.as("plantType"))
                        .join(AREA).on(PLANT_ITEM.AREA_ID.eq(AREA.ID))
                        .join(PLANT).on(AREA.PLANT_ID.eq(PLANT.ID))
                        .where(PLANT_ITEM.AREA_ID.eq(query.getAreaId())),
                PlantItemPageVO.class);
    }

    /**
     * 查询植物项详情
     * @param id 植物项ID
     * @return 植物项详情（包含区域名称）
     */
    default Row selectDetail(Long id){
        return selectOneWithRelationsByQueryAs(QueryWrapper.create()
                .select(PLANT_ITEM.ALL_COLUMNS,AREA.NAME.as("areaName"))
                .join(AREA).on(PLANT_ITEM.AREA_ID.eq(AREA.ID))
                .where(PLANT_ITEM.ID.eq(id)), Row.class
        );
    }
}
